#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;//21!9-324@emb
/*
3 5 4 
1 5
3 8
6 10
9 14
13 18
2 11
4 15
7 17
12 16
*/
int sum,m,n;
struct node{
	int st,en;
}a[100011],b[100011];
int ansa[100011],ansb[100011],last[100011];
int ff(int x)
{
	if(x==0) return 0;
	int ans=0;
	int lk=0;
	for(int i=1;i<=m;i++)
	{
		bool flag=true;
		for(int j=1;j<=lk;j++)
		{
			if(a[i].st>=last[j])
			{
				ans++;
				last[j]=a[i].en;
				flag=false;
				break;
			}
		}
		if(flag&&x>0)
		{
			x--;
			ans++;
			last[++lk]=a[i].en;
		}
	}
	return ans;
}
int f(int x)
{
	if(x==0) return 0;
	int ans=0;
	int lk=0;
	for(int i=1;i<=n;i++)
	{
		bool flag=true;
		for(int j=1;j<=lk;j++)
		{
			if(b[i].st>=last[j])
			{
				ans++;
				last[j]=b[i].en;
				flag=false;
				break;
			}
		}
		if(flag&&x>0)
		{
			x--;
			ans++;
			last[++lk]=b[i].en;
		}
	}
	return ans;
}
int main()
{
	freopen("airport.in","r",stdin);
	freopen("airport.out","w",stdout);
	cin>>sum>>m>>n;
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&a[i].st,&a[i].en);
	}
	for(int j=1;j<=n;j++)
	{
		scanf("%d%d",&b[j].st,&b[j].en);
	}
	for(int i=0;i<=sum;i++)
	{
		ansa[i]=ff(i);
	}
	memset(last,0,sizeof(last));
	for(int j=0;j<=sum;j++)
	{
		ansb[j]=f(j);
	}
	int ans=0;
	for(int i=0;i<=sum;i++)
	{
		ans=max(ans,ansa[i]+ansb[sum-i]);
	}
	cout<<ans;
	fclose(stdin);
	fclose(stdout);
	return 0;
}
